package top.tenebrous.yzl.im.factory.colony;

import top.tenebrous.yzl.im.enums.MessageType;
import top.tenebrous.yzl.im.enums.ProducerType;
import top.tenebrous.yzl.im.sender.AbstractSenderHandler;

/**
 * 集群消息工厂
 *
 * 集群下的消息
 *  生产者 {@link top.tenebrous.yzl.im.sender.AbstractSenderHandler}
 * 的抽象都会在这个工厂中产生
 *
 * 在程序启动的时候，，会自动将该抽象下的实现加入到工厂中，根据配置的设置，选择具体的实现
 *
 * @author yazhang6
 */
public interface MessageQueueFactory {

    /**
     * 注册生产者
     * @param producerType
     * @param senderHandler
     */
    void registerProducer(ProducerType producerType, AbstractSenderHandler senderHandler);

    /**
     * 获取生产者
     *
     * @param producerType
     * @return
     */
    AbstractSenderHandler getProducerInstance(ProducerType producerType);

}
